package 行为型模式.状态模式;

/**
 * 主要组成部分
 * Context（上下文）：定义客户端感兴趣的接口，并维护一个具体状态子类的实例，这个实例定义当前状态。
 * State（状态）：定义一个接口以封装与Context的一个特定状态相关的行为。
 * ConcreteState（具体状态）：每一个子类实现一个与Context的一个状态相关的行为。
 */

interface IState
{
	IState handle(Context context);
}

class AState implements IState
{
	@Override
	public IState handle(Context context) 
	{
		//处理状态
		System.out.println("处理A状态");
		//切换状态
		return new BState();
	}
}

class BState implements IState
{
	@Override
	public IState handle(Context context)
	{
		//处理状态
		System.out.println("处理B状态");
		//切换状态
		return new AState();
	}
}

class Context
{
	private IState iState;

	Context(IState iState) {
		this.iState = iState;
	}

	public IState getiState() {
		return iState;
	}

	public void setiState(IState iState) {
		this.iState = iState;
	}
	
	public void request()
	{
		iState = iState.handle(this);
	}
}


public class State 
{
	public static void main(String[] args) 
	{
		Context context = new Context(new AState());
		context.request();
		context.request();
		context.request();
	}
}
